<?php

/**
 * Classe permettant de faire une pagination simple
 * @author Gaétan Collaud
 */
abstract class Pagination
{
	/**
	 * Permet de crée une pagination simple
	 * @param String $l le liens (utilisé %d pour la page et %s pour le texte)
	 * @param int $p la page actuelle
	 * @param int $nb le nombre de page total
	 * @param boolean $asc si la liste est ascendante
	 * @param String $sep la chaine de séparation
	 * @return String le listage au format HTML
	 */
	public static function listage($l, $p, $nb, $asc=true, $sep = ' ') {
		global $lg;
		$r = '';
		$s = true;
		if($p>1 && $asc || $p<$nb && !$asc) {
			$r .= sprintf($l, $asc ? $p-1 : $p+1, encode('Précédent'));
			$s = false;
		}
		if(!$s) $r .= $sep;
		$array = self::getListPage($p, $nb);
		if(!$asc) $array = array_reverse($array);
		foreach($array as $v) {
			if(!$s) $r .= $sep;
			if($s) $s = false;

			if($v == '...')
				$r .= '...';
			elseif($v == $p)
				$r .= '<span class="this_page">'.$v.'</span>';
			else {
				$r .= sprintf($l, $v, $v);
			}
		}
		if($p<$nb && $asc || $p>1 && !$asc) {
			$r .= $sep;
			$r .= sprintf($l, $asc ? $p+1 : $p-1, encode('Suivant'));
		}
		return $r;
	}

	/**
	 * Méthode allant de paire avec listage
	 * @param int $page la page actuelle
	 * @param int $nb_page le nombre de page maximal
	 * @param int $nb le nombre d'élément de chaque coté
	 * @return array la liste des pages
	 */
	private static function getListPage($page, $nb_page, $nb = 4){
		$list_page = array();

		for ($i=1;$i <= $nb_page;$i++)
		{
			if(($i < $nb) || ($i > $nb_page - $nb) || (($i < $page + $nb) && ($i > $page -$nb)))
				$list_page[] = $i;
			else{
				if($i >= $nb && $i <= $page - $nb)
					$i = $page - $nb;
				elseif($i >= $page + $nb && $i <= $nb_page - $nb)
					$i = $nb_page - $nb;

				$list_page[] = '...';
			}
		}

		return $list_page;
	}
}

?>
